# TODO: 盒图
# DATE: 2022/3/29
# AUTHOR: Cheng Ze WUST
import numpy as np
import matplotlib.pyplot as plt

#region
tang_data=[np.random.normal(0,std,100) for std in range(1,4)]   #从正态（高斯）分布中抽取随机样本。
fig=plt.figure(figsize=(8,6))
plt.boxplot(tang_data,notch=False,sym='s',vert=True)    #sym离群点表示方法
plt.xticks([y+1 for y in range(len(tang_data))],['x1','x2','x3'])
plt.xlabel('x')
plt.title('BoxPlot1')
plt.show()
#endregion

#region detail
tang_data=[np.random.normal(0,std,100) for std in range(1,4)]
fig=plt.figure(figsize=(8,6))
bplot=plt.boxplot(tang_data,notch=False,sym='s',vert=False) #vert=False横着画
plt.yticks([y+1 for y in range(len(tang_data))],['x1','x2','x3'])
plt.ylabel('x')
plt.title('BoxPlot2')
for component in bplot.keys():  #将图中线条都同一颜色
    for line in bplot[component]:
        line.set_color('blue')
plt.show()
#endregion

#region 小提琴图
fig,axes=plt.subplots(nrows=1,ncols=2,figsize=(12,5))
tang_data=[np.random.normal(0,std,100) for std in range(6,10)]
axes[0].violinplot(tang_data,showmeans=False,showmedians=True)
axes[0].set_title('violin plot')
axes[1].boxplot(tang_data)
axes[1].set_title('box plot')
plt.setp(axes,xticks=[y+1 for y in range(len(tang_data))],xticklabels=['x1','x2','x3','x4'])
plt.show()
#endregion